<?php

class UploadMedia
{
    static $aImageTypes = array('gif', 'jpg', 'jpeg', 'png');
    static $aAllTypes = array('gif', 'jpg', 'jpeg', 'png', 'swf');
    
	static function Save($field_name, $fn, $index = null)
	{
	    $aFile = is_null($index) ? $_FILES[$field_name] :
	        array('name' => $_FILES[$field_name]['name'][$index],
	          'tmp_name' => $_FILES[$field_name]['tmp_name'][$index],
	        );
		if (!is_uploaded_file($aFile['tmp_name'])) return false;
		
		$ext = strtolower(end(explode(".", $aFile['name'])));
		
		if (!in_array($ext, self::$aAllTypes)) return false;
		
		self::CheckDirs($fn);
		
		self::Clear($fn); // удаляем предыдущую версию, если она есть
		
		$target = BASE_DIR.'/data/media/'.$fn;
		
		move_uploaded_file($aFile['tmp_name'], $target);
		
		return true;
	}
	
	static function CheckDirs($fn)
	{
		// поскольку файл создается по датам, то
		// создаем нужные директории при необходимости
		$oldumask = umask(0);
		$parts = explode('/', $fn);
		$dirs = array_slice($parts, 0, sizeof($parts) - 1);
		$id = $parts[sizeof($parts) - 1];
		
		$path = '';
		foreach ($dirs as $dir)
		{
			$path .= '/'.$dir;
			if (!file_exists(BASE_DIR.'/data/media'.$path))
			{
				mkdir(BASE_DIR.'/data/media'.$path, 0775);
			}
		}
		umask($oldumask);
	}

	static function Clear($fn)
	{
		if (!$fn) return;
		
		$target = BASE_DIR.'/data/media/'.$fn;
		
		if (file_exists($target)) unlink($target);
	}
}